package main

import (
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/logs"
	"math/rand"
	"smart_home/api/controllers"
	_ "smart_home/api/routers"
	_ "smart_home/api/utils"
	"tools"

	//_ "smart_home/api/models"
	"time"
)

func init() {
	if beego.BConfig.RunMode == "dev" {
		beego.BConfig.WebConfig.DirectoryIndex = false
		beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
	}

	// 日志
	/*
	filename 保存的文件名
	maxlines 每个文件保存的最大行数，默认值 1000000
	maxsize 每个文件保存的最大尺寸，默认值是 1 << 28, //256 MB
	daily 是否按照每天 logrotate，默认是 true
	maxdays 文件最多保存多少天，默认保存 7 天
	rotate 是否开启 logrotate，默认是 true
	level 日志保存的时候的级别，默认是 Trace 级别

	LevelEmergency     = 0
	LevelAlert = 1
	LevelCritical = 2
	LevelError = 3
	LevelWarning = 4
	LevelNotice = 5
	LevelInformational = 6
	LevelDebug = 7

	perm 日志文件权限
	separate 需要单独写入文件的日志级别,设置后命名类似 test.error.log
	*/
	logsFileName := beego.AppConfig.DefaultString("logs_file_name", "logs/logs.log")
	logsLevel := beego.AppConfig.DefaultInt("logs_level", 1)
	confStr := fmt.Sprintf(`{"filename":"%s", "level":%d , "color":true, "separate":["error"]}`, logsFileName, logsLevel)
	logs.SetLogger(logs.AdapterMultiFile, confStr)
	logs.EnableFuncCallDepth(true)
	logs.SetLogFuncCallDepth(3)
	logs.Async()

	//以时间作为初始化种子
	rand.Seed(time.Now().UnixNano())

	config()
}

// 动态配置
func config()  {
	// 配置外网ip
	beego.AppConfig.Set("ipaddr", tools.GetExternalIp())
}

func main() {
	beego.ErrorController(&controllers.ErrorController{})
	beego.Run()
}
